# Programación Orientada a Objetos

## Conceptos de Programación Orientada a Objetos


### Principios de Orientación a Objetos

  * Objetos : Tipos de datos abstractos que encapsulan las estructuras de datos y los métodos (operaciones y algoritmos) que manipulan las estructuras de datos.
  * Clases : Descripción de un conjunto de objetos, que define sus características y métodos comunes. Son modelos o plantillas que describen la estructura de una familia de objetos.
  * Atributos : Describen el estado de un objeto. Un atributo consta de un nombre y un valor, usualmente el valor puede cambiar por medio de un método.
  * Métodos : Describen el comportamiento asociado a un objeto. Generalmente son acciones, operaciones o algoritmos cuya ejecución puede conducir a cambiar el estado de un objeto. 
  * Mensajes : Peticiónes de un objeto a otro que solicitan la ejecución de uno o varios de sus métodos.
  
### Propiedades de los objetos

  * Abstracción : Permite representar las características esenciales de un objeto, excluyendo aquellas que resultan no esenciales para la representación o el modelado de la solución del problema.
  * Encapsulamiento : Asegurar que el contenido de la información de un objeto está oculta al mundo exterior; corresponde al objeto mismo cambiar su propio estado.
  * Modularidad : Permite subdividir una aplicación en partes más pequeñas o módulos. En esencia estos módulos deben ser lo mas independientes entre sí, de forma que la modificación de un módulo resulte irrelevante en otro.
  * Polimorfismo : Indica literalmente que una entidad tome muchas formas. Permite referirse a objetos de clases diferentes para realizar la misma operación de diferentes formas dependiendo del objeto al que se hace referencia.

### Relaciones entre objetos

  * Herencia : Relación entre dos o más objetos que comparten atributos y métodos comunes de forma jerárquica. Dicha relación se define en clases que se organizan como una jerarquía, la cual permite la ordenación de las abstracciones mediante genralización o especialización (relación es-un).
  * Agregación : Permite el agrupamiento de estructuras relacionadas lógicamente, como una composición. Así un objeto se convierte en una agregación al componerse de otros objetos, y los objetos que lo componen se de nominan agregados (relacion tiene-un).
  * Asociación : Representa una dependencia semántica e implica la dirección de esta dependencia, ésta dependencia puede ser bidireccional o unidireccional (relaciones "pertenece a", "es miembro de", "asociado con", "trabaja para"). Este tipo de relación tiene la propiedad de cardinalidad (una a una, una a muchas, muchas a muchas).
  * Uso : Relación momentanea en la cual un objeto delega a otro una acción momentaneamente para obtener algún recurso.
